#!/usr/bin/env node

import sharp from 'sharp';
import { existsSync, mkdirSync } from 'fs';
import { join, dirname } from 'path';
import { fileURLToPath } from 'url';

const __dirname = dirname(fileURLToPath(import.meta.url));
const projectRoot = join(__dirname, '..');
const assetDir = join(projectRoot, 'asset');
const logoPath = join(assetDir, 'logo.png');

// 图标配置
const iconConfigs = [
  {
    name: 'icon.png',
    width: 160,
    height: 160,
    description: '插件图标 (160x160)'
  },
  {
    name: 'preview.png', 
    width: 1024,
    height: 768,
    description: '预览图 (1024x768)',
    background: '#f5f5f5' // 为预览图添加背景色
  }
];

/**
 * 生成图标
 */
async function generateIcons() {
  console.log('🚀 开始生成思源笔记插件图标...\n');

  // 检查源文件是否存在
  if (!existsSync(logoPath)) {
    console.error(`❌ 错误: 找不到源文件 ${logoPath}`);
    console.error('请确保 asset/logo.png 文件存在');
    process.exit(1);
  }

  // 确保输出目录存在
  if (!existsSync(assetDir)) {
    mkdirSync(assetDir, { recursive: true });
  }

  try {
    // 获取原图信息
    const logoInfo = await sharp(logoPath).metadata();
    console.log(`📁 源文件: ${logoPath}`);
    console.log(`📏 源文件尺寸: ${logoInfo.width}x${logoInfo.height}\n`);

    // 生成各种尺寸的图标
    for (const config of iconConfigs) {
      const outputPath = join(assetDir, config.name);
      
      console.log(`🔄 生成 ${config.description}...`);
      
      let pipeline = sharp(logoPath);
      
      if (config.name === 'preview.png') {
        // 对于预览图，创建带背景的版本
        // 首先调整logo大小，保持比例，适应预览图
        const logoSize = Math.min(config.width * 0.6, config.height * 0.6); // logo占预览图的60%
        
        // 创建背景
        const background = sharp({
          create: {
            width: config.width,
            height: config.height,
            channels: 4,
            background: config.background || '#ffffff'
          }
        });
        
        // 调整logo大小并居中
        const resizedLogo = await sharp(logoPath)
          .resize(Math.round(logoSize), Math.round(logoSize), {
            fit: 'inside',
            withoutEnlargement: true
          })
          .png()
          .toBuffer();
        
        // 合成最终图像
        pipeline = background.composite([{
          input: resizedLogo,
          gravity: 'center'
        }]);
      } else {
        // 对于图标，直接调整大小
        pipeline = pipeline.resize(config.width, config.height, {
          fit: 'cover',
          position: 'center'
        });
      }
      
      await pipeline
        .png({ quality: 90 })
        .toFile(outputPath);
      
      // 获取生成文件的信息
      const generatedInfo = await sharp(outputPath).metadata();
      console.log(`✅ ${config.name} - ${generatedInfo.width}x${generatedInfo.height} - ${outputPath}`);
    }

    console.log('\n🎉 所有图标生成完成!');
    console.log('\n📋 生成的文件:');
    iconConfigs.forEach(config => {
      console.log(`   • ${config.name} - ${config.description}`);
    });

  } catch (error) {
    console.error('❌ 生成图标时出错:', error.message);
    process.exit(1);
  }
}

// 如果直接运行此脚本
if (process.argv[1] && process.argv[1].endsWith('generate-icons.js')) {
  generateIcons();
}

export default generateIcons;
